package com.link.base.tencent.corpwx.message.service;

import com.link.base.tencent.corpwx.message.model.MessageBase;
import com.link.base.tencent.corpwx.message.model.MessageMiniProgram;
import com.link.base.tencent.corpwx.message.model.MessageMpNews;
import com.link.base.tencent.corpwx.message.model.MessageNews;
import com.link.core.basic.service.BasicService;

import java.util.List;

/**
 * 应用消息服务
 * 调用消息发送服务时，为了便于控制参数是否传递，将消息发送参数区分为两部分：
 *  1、messageBase 需要为其赋值agentId，同时对于消息接收对象，
 *      一方面可以直接赋值sendAll为true实现全员发送；
 *      一方面则是通过为userIdList、partyIdList、tagIdList三个参数赋值，实现按照用户Id、部门Id、标签Id形式筛选用户；
 *  2、消息主体内容
 * 
 * @author 欧阳振强
 * @date 2020/01/03
 */
public interface AgentMessageService extends BasicService<MessageBase> {
    /**
     * 应用消息 - 发送文本消息
     *
     * @author 欧阳振强
     * @date 2020/01/03
     * @param messageBase 消息接收对象，包括发送人、发送应用
     * @param content 文本消息
     */
    void sendAgentTextMsg(MessageBase messageBase, String content) throws Exception;

    /**
     * 应用消息 - 发送图片消息
     *
     * @author 欧阳振强
     * @date 2020/01/03
     * @param messageBase 消息接收对象，包括发送人、发送应用
     * @param mediaId 图片Id
     */
    void sendAgentImageMsg(MessageBase messageBase, String mediaId) throws Exception;

    /**
     * 应用消息 - 发送音频消息
     *
     * @author 欧阳振强
     * @date 2020/01/03
     * @param messageBase 消息接收对象，包括发送人、发送应用
     * @param mediaId 音频Id
     */
    void sendAgentVoiceMsg(MessageBase messageBase, String mediaId) throws Exception;

    /**
     * 应用消息 - 发送视频消息
     *
     * @author 欧阳振强
     * @date 2020/01/03
     * @param messageBase 消息接收对象，包括发送人、发送应用
     * @param mediaId 视频Id
     * @param title 视频消息标题
     * @param description 视频消息描述
     */
    void sendAgentVideoMsg(MessageBase messageBase, String mediaId, String title, String description) throws Exception;

    /**
     * 应用消息 - 发送文件消息
     *
     * @author 欧阳振强
     * @date 2020/01/03
     * @param messageBase 消息接收对象，包括发送人、发送应用
     * @param mediaId 文件Id
     */
    void sendAgentFileMsg(MessageBase messageBase, String mediaId) throws Exception;

    /**
     * 应用消息 - 发送文本卡片消息
     *
     * @author 欧阳振强
     * @date 2020/01/03
     * @param messageBase 消息接收对象，包括发送人、发送应用
     * @param title 标题
     * @param description 描述
     * @param msgUrl 点击后跳转的链接
     * @param btnTxt 按钮文字
     */
    void sendAgentTextCardMsg(MessageBase messageBase, String title, String description, String msgUrl, String btnTxt) throws Exception;

    /**
     * 应用消息 - 发送图文消息
     *
     * @author 欧阳振强
     * @date 2020/01/03
     * @param messageBase 消息接收对象，包括发送人、发送应用
     * @param messageNewsList 图文消息对象列表
     */
    void sendAgentNewsMsg(MessageBase messageBase,  List<MessageNews> messageNewsList) throws Exception;

    /**
     * 应用消息 - 发送图文消息（mpnews）
     *
     * @author 欧阳振强
     * @date 2020/01/03
     * @param messageBase 消息接收对象，包括发送人、发送应用
     * @param messageMpNewsList 图文消息（mpnews）对象列表
     */
    void sendAgentMpNewsMsg(MessageBase messageBase,  List<MessageMpNews> messageMpNewsList) throws Exception;

    /**
     * 应用消息 - 发送小程序通知消息
     *
     * @author 欧阳振强
     * @date 2020/01/03
     * @param messageBase 消息接收对象，包括发送人
     * @param messageMiniProgram 小程序消息对象
     */
    void sendAgentMpNewsMsg(MessageBase messageBase, MessageMiniProgram messageMiniProgram) throws Exception;
}
